package membresia.em.financeiro;

/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import membresia.bean.financeiro.Entrada;
import membresia.service.Service;

public class EntradaEm {

    /**
     * Método que persiste um objeto Entrada no Banco
     */
    public static void cadastraEntrada(Entrada p) {
        // persiste no banco de dados
        EntityManager em = Service.getEntityManagerFactory();
        em.getTransaction().begin();
        em.persist(p);
        em.flush();
        em.getTransaction().commit();
        em.close();

    }

    /**
     * Método que Atualiza um Objeto Entrada
     */
    public static void atualizaEntrada(Entrada p) {
        // persiste no banco de dados
        EntityManager em = Service.getEntityManagerFactory();
        em.getTransaction().begin();
        em.merge(p);
        em.flush();
        em.getTransaction().commit();
        em.close();
    }

    /**
     * Método busca uma Entrada pelo ID
     *
     * @return Entrada
     */
    public static Entrada findById(int id) {
        EntityManager em = Service.getEntityManagerFactory();
        em.getTransaction().begin();
        Entrada p = em.find(Entrada.class, id);
        em.getTransaction().commit();
        em.close();
        return p;
    }

    /**
     * Método que lista todas as Entradas
     */
    @SuppressWarnings("unchecked")
    public static List<Entrada> findAll() {
        EntityManager em = Service.getEntityManagerFactory();
        em.getTransaction().begin();
        Query q = em.createQuery("select p from Entrada p ");
        List<Entrada> Entradas = q.getResultList();
        em.flush();
        em.getTransaction().commit();
        em.close();
        return Entradas;
    }

    /**
     * Método que lista todas as Entradas
     */
    @SuppressWarnings("unchecked")
    public static List<Entrada> findByNome(String nome) {
        EntityManager em = Service.getEntityManagerFactory();
        em.getTransaction().begin();
        Query q = em.createQuery("select p from Entrada p where p.descricao like '%"
                + nome + "%'");
        List<Entrada> Entradas = q.getResultList();
        em.flush();
        em.getTransaction().commit();
        em.close();
        return Entradas;
    }

    /**
     * Método de Exclusão de Entrada
     */
    public static void excluirEntrada(int id) {
        // exclui uma Entrada por id
        Entrada Entrada = findById(id);
        // excluir a Entrada
        EntityManager em = Service.getEntityManagerFactory();
        em.getTransaction().begin();
        em.remove(em.getReference(Entrada.class, Entrada.getId()));
        em.flush();
        em.getTransaction().commit();
        em.close();
    }
}